

USE SIGCSM_prueba
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_asignarValoresConfiguracion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_asignarValoresConfiguracion    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_asignarGeneracionYPoblacion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_asignarGeneracionYPoblacion    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_registrarDetalleCromosoma]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_registrarDetalleCromosoma    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerMejoresCromosomasDeGeneracion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerMejoresCromosomasDeGeneracion    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_eliminarGeneracionCromosomaPoblacionYFitnes]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_eliminarGeneracionCromosomaPoblacionYFitnes    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerCromosomasFinales]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerCromosomasFinales    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_guardarCromosomasFinales]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_guardarCromosomasFinales    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerUltimaConfiguracion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerUltimaConfiguracion    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerNumeroCromosomasPorFitnnes]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerNumeroCromosomasPorFitnnes    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerOrganizaciones]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerOrganizaciones    
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerHallazgos]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerHallazgos    
GO


CREATE PROCEDURE sp_asignarValoresConfiguracion(
   @NUMEROPACIENTESACONSIDERAR	INT,
   @NUMEROPOBLACIONACONSIDERAR	INT,
   @PROBABIBLIDADCROSSOVER		NUMERIC(18,8),
   @PROBABILIDADMUTACION		NUMERIC(18,8),
   @NUMEROGENERACIONACONSIDERAR	INT,
   @NUMEROHALLAZGOSACONSIDERAR	INT,
   @CODIGOORGANIZACIONES		VARCHAR(20),
   @LISTANUMEROREGLASACONSIDERAR	VARCHAR(20),
   @IDCONFIGURACION INT OUT
   
)AS
BEGIN
	
	DECLARE @NUMEROCONFIG INT
	SELECT @NUMEROCONFIG = IDCONFIGURACION FROM SM_CONFIGURACION
	SET @NUMEROCONFIG = @NUMEROCONFIG + 1

  	INSERT INTO  SM_CONFIGURACION
		(NUMEROCONFIGURACION, NUMEROPACIENTESACONSIDERAR, NUMEROPOBLACIONACONSIDERAR, PROBABIBLIDADCROSSOVER, PROBABILIDADMUTACION,
		NUMEROGENERACIONACONSIDERAR, NUMEROHALLAZGOSACONSIDERAR)
	VALUES(
		@NUMEROCONFIG, @NUMEROPACIENTESACONSIDERAR, @NUMEROPOBLACIONACONSIDERAR, @PROBABIBLIDADCROSSOVER, @PROBABILIDADMUTACION,
		@NUMEROGENERACIONACONSIDERAR, @NUMEROHALLAZGOSACONSIDERAR)
	
	--DECLARE @IDCONFIGURACION INT
	SET @IDCONFIGURACION = @@IDENTITY 
 	
	DECLARE @NUMEROREGLASACONSIDERAR INT, @IDORGANIZACION	INT
	
	WHILE( SELECT LEN(@CODIGOORGANIZACIONES)) > 0
	BEGIN
		SET @IDORGANIZACION =CONVERT(INT, SUBSTRING(@CODIGOORGANIZACIONES,0,2))
		SET @NUMEROREGLASACONSIDERAR =CONVERT(INT, SUBSTRING(@LISTANUMEROREGLASACONSIDERAR,0,2))
		
		INSERT INTO SM_CONFIGURACIONORGANIZACION
			(IDCONFIGURACION, IDORGANIZACION, NUMEROREGLASACONSIDERAR)
		VALUES (
			@IDCONFIGURACION, @IDORGANIZACION, @NUMEROREGLASACONSIDERAR)
		
		
		IF( LEN(@CODIGOORGANIZACIONES) > 1 )
		BEGIN
			SET @CODIGOORGANIZACIONES = SUBSTRING(@CODIGOORGANIZACIONES, 3, LEN(@CODIGOORGANIZACIONES)-2)
			SET @LISTANUMEROREGLASACONSIDERAR = SUBSTRING(@LISTANUMEROREGLASACONSIDERAR, 3, LEN(@LISTANUMEROREGLASACONSIDERAR)-2)
		END
		ELSE
		BEGIN
			SET @CODIGOORGANIZACIONES =''
			SET @LISTANUMEROREGLASACONSIDERAR =''
		END
	END
		
END
GO

CREATE PROCEDURE sp_asignarGeneracionYPoblacion(
   @NUMEROGENERACION	INT,
   @DETALLE				VARCHAR(100),
   @ITERACIONES			INT,
   @NUMEROPOBLACIONINICIAL	INT,
   @NUMEROPOBLACIONFINAL	INT,
   @IDCONFIGURACION		INT,
   @IDGENERACION INT OUT,
   @IDPOBLACION	INT OUT
   
)AS
BEGIN
	INSERT INTO SM_GENERACION
		(NUMEROGENERACION, DETALLE, ITERACIONES,IDCONFIGURACION)
	VALUES
		(@NUMEROGENERACION,@DETALLE,@ITERACIONES,@IDCONFIGURACION)
	
	--DECLARE @IDGENERACION INT
	SET @IDGENERACION = @@IDENTITY
	
	INSERT INTO SM_POBLACION
		(IDGENERACION,NUMEROPOBLACIONINICIAL,NUMEROPOBLACIONFINAL)
	VALUES
		(@IDGENERACION, @NUMEROPOBLACIONINICIAL,@NUMEROPOBLACIONFINAL)

	SET @IDPOBLACION = 	@@IDENTITY

END
GO
--SP_HELPTEXT sp_registrarDetalleCromosoma
CREATE PROCEDURE sp_registrarDetalleCromosoma(
	@NUMEROCROMOSOMA		INT ,
	@PARENTESCO				VARCHAR(50),
	@GENERACIONACIMIENTO	INT,
	@GENERACIONFALLECIMIENTO	INT,
	@PADRE					VARCHAR(20),
	@MADRE					VARCHAR(20),
	@FLAGSELECCION			INT,
	@ESTADO					VARCHAR(1),
	@IDGENERACION			INT,
	@NUMEROPOSICION			INT,
	@VALORADAPTACION		NUMERIC(18,8),
	@REGLASACERTADAS		INT,
	@IDPOBLACION			INT,
	@IDCONFIGURACION		INT,
	@IDCROMOSOMA			INT 

)
AS
BEGIN
		IF (@GENERACIONFALLECIMIENTO = 0)
			SET @GENERACIONFALLECIMIENTO = null
		
		
		IF NOT EXISTS (SELECT IDCROMOSOMA FROM SM_CROMOSOMA C
					   INNER JOIN SM_POBLACION P ON C.IDPOBLACION = P.IDPOBLACION
					   INNER JOIN SM_GENERACION G ON P.IDGENERACION =G.IDGENERACION 
					   WHERE C.NUMEROCROMOSOMA = @NUMEROCROMOSOMA
							AND G.IDCONFIGURACION  = @IDCONFIGURACION)
		BEGIN
			INSERT INTO SM_CROMOSOMA
				(IDPOBLACION,NUMEROCROMOSOMA, PARENTESCO, GENERACIONACIMIENTO, GENERACIONFALLECIMIENTO, 
				 PADRE, MADRE, FLAGSELECCION, ESTADO)
			VALUES
				(@IDPOBLACION,@NUMEROCROMOSOMA, @PARENTESCO, @GENERACIONACIMIENTO, @GENERACIONFALLECIMIENTO, 
					@PADRE, @MADRE, @FLAGSELECCION, @ESTADO)
			
			SET @IDCROMOSOMA = 	@@IDENTITY
			
		END
		ELSE
		BEGIN
			 UPDATE		SM_CROMOSOMA 
				SET		PARENTESCO = @PARENTESCO,
						GENERACIONFALLECIMIENTO = @GENERACIONFALLECIMIENTO
			   FROM		SM_CROMOSOMA C
		 INNER JOIN		SM_POBLACION P ON C.IDPOBLACION = P.IDPOBLACION
		 INNER JOIN		SM_GENERACION G ON P.IDGENERACION =G.IDGENERACION 
			  WHERE		NUMEROCROMOSOMA = @NUMEROCROMOSOMA
						AND G.IDCONFIGURACION  = @IDCONFIGURACION
				
		END	
	
	
		INSERT INTO SM_CROMOSOMAGENERACIONVALORFITNNES
			(IDGENERACION, IDCROMOSOMA, NUMEROPOSICION, VALORADAPTACION, REGLASACERTADAS)
		 VALUES
		 (@IDGENERACION, @IDCROMOSOMA, @NUMEROPOSICION, @VALORADAPTACION, @REGLASACERTADAS)
		 
	
END
GO

CREATE PROCEDURE sp_obtenerMejoresCromosomasDeGeneracion(
	@NUMEROGENERACION	INT,
	@IDCONFIGURACION	INT
)
AS
BEGIN
--		DECLARE @NUMEROGENERACION	INT,
--		@IDCONFIGURACION	INT
--
--		SET @NUMEROGENERACION = 1
--		SET @IDCONFIGURACION = 2

		DECLARE @TAM_POBLACION INTEGER
		
			SELECT	@TAM_POBLACION = NUMEROPOBLACIONFINAL/2 
			  FROM	SM_POBLACION P
		INNER JOIN	SM_GENERACION G ON P.IDGENERACION = G.IDGENERACION 
			 WHERE	G.NUMEROGENERACION = @NUMEROGENERACION AND G.IDCONFIGURACION = @IDCONFIGURACION
		
		EXEC(  'SELECT			TOP ' + @TAM_POBLACION + '
								C.NUMEROCROMOSOMA,
								CGF.NUMEROPOSICION,
								CGF.VALORADAPTACION,
								G.NUMEROGENERACION,
								CGF.REGLASACERTADAS,
								CGF.IDCROMOSOMA AS IDCONOCIMIENTO
				FROM			SM_CROMOSOMA C
				INNER JOIN		SM_CROMOSOMAGENERACIONVALORFITNNES CGF ON C.IDCROMOSOMA = CGF.IDCROMOSOMA
				INNER JOIN		SM_GENERACION G ON CGF.IDGENERACION = G.IDGENERACION
				WHERE			G.NUMEROGENERACION = '+@NUMEROGENERACION+'
								AND G.IDCONFIGURACION = '+ @IDCONFIGURACION+'
								--AND (@NUMEROGENERACION - C.GENERACIONACIMIENTO ) < 5
								AND C.GENERACIONFALLECIMIENTO IS NULL --  AUN VIVOS
				ORDER BY		CGF.VALORADAPTACION DESC, 
								--CGF.REGLASACERTADAS DESC, 
								G.NUMEROGENERACION DESC ')
		
		
		
		EXEC(  'UPDATE			SM_CROMOSOMA 
				SET				GENERACIONFALLECIMIENTO = '+@NUMEROGENERACION+'
				FROM			SM_CROMOSOMA CROM
				WHERE			NOT EXISTS
							   (SELECT			TOP ' + @TAM_POBLACION + '
												*
								FROM			SM_CROMOSOMA C
								INNER JOIN		SM_CROMOSOMAGENERACIONVALORFITNNES CGF ON C.IDCROMOSOMA = CGF.IDCROMOSOMA
								INNER JOIN		SM_GENERACION G ON CGF.IDGENERACION = G.IDGENERACION
								WHERE			G.NUMEROGENERACION = '+@NUMEROGENERACION+'
												AND G.IDCONFIGURACION = '+ @IDCONFIGURACION+'
												AND C.GENERACIONFALLECIMIENTO IS NULL 
								)
								AND GENERACIONFALLECIMIENTO IS NULL ')
		
END

GO
/*
CREATE PROCEDURE sp_eliminarGeneracionCromosomaPoblacionYFitnes
AS
BEGIN

	DELETE FROM SM_CROMOSOMAGENERACIONVALORFITNNES
	DELETE FROM SM_POBLACION
	DELETE FROM dbo.SM_CROMOSOMAS_FINALES
	DELETE FROM SM_CROMOSOMA
	DELETE FROM SM_GENERACION
	
	DBCC CHECKIDENT ('dbo.SM_CROMOSOMAS_FINALES', RESEED, 0);
	

END
GO
*/

CREATE PROCEDURE sp_guardarCromosomasFinales(
	@NUMEROCROMOSOMA INT,
	@NUMEROGENERACION INT,
	@CONOCIMIENTO VARCHAR(8000),
	@NUMEROFILA INT,
	@NUMEROCOLUMNA INT,
	@ULTIMOCROMOSOMA INT,
	@IDCONFIGURACION	INT
)
AS
BEGIN
	INSERT INTO SM_CROMOSOMAS_FINALES 
	(IDCONFIGURACION, NUMEROCROMOSOMA, NUMEROGENERACION, CONOCIMIENTO, NUMEROFILA, NUMEROCOLUMNA, ULTIMOCROMOSOMA)
	VALUES 
	(@IDCONFIGURACION, @NUMEROCROMOSOMA, @NUMEROGENERACION, @CONOCIMIENTO,@NUMEROFILA, @NUMEROCOLUMNA, @ULTIMOCROMOSOMA)
	
		
END
GO

CREATE PROCEDURE sp_obtenerCromosomasFinales
AS
BEGIN
	DECLARE @IDCONFIGURACION INT 
	SELECT TOP 1 @IDCONFIGURACION = IDCONFIGURACION FROM SM_CONFIGURACION ORDER BY IDCONFIGURACION DESC

	SELECT		IDCROMOSOMASFINALES,NUMEROCROMOSOMA, NUMEROGENERACION, 
				CONOCIMIENTO, NUMEROFILA, NUMEROCOLUMNA , ULTIMOCROMOSOMA
	FROM		SM_CROMOSOMAS_FINALES
	WHERE		NUMEROGENERACION IN (SELECT		TOP 1 NUMEROGENERACION
									 FROM		SM_CROMOSOMAS_FINALES
									 WHERE		IDCONFIGURACION = @IDCONFIGURACION
									 ORDER BY	NUMEROGENERACION DESC
									 )
				AND	IDCONFIGURACION= @IDCONFIGURACION
	ORDER BY	IDCROMOSOMASFINALES DESC
		
END
GO


CREATE PROCEDURE sp_obtenerUltimaConfiguracion
AS
BEGIN

	SELECT  * 
	FROM		SM_CONFIGURACION C
	INNER JOIN	SM_CONFIGURACIONORGANIZACION CO ON C.IDCONFIGURACION = CO.IDCONFIGURACION
	WHERE		C.IDCONFIGURACION IN (
					SELECT		TOP 1 IDCONFIGURACION
					FROM		SM_CONFIGURACION 
					ORDER BY	IDCONFIGURACION DESC
									)
END
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerFitnnesConGeneracionDeNacimiento]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerFitnnesConGeneracionDeNacimiento    
GO

CREATE PROCEDURE sp_obtenerFitnnesConGeneracionDeNacimiento(
	@IDCONFIGURACION INT
)
AS 
BEGIN
	SELECT		VALORADAPTACION, MIN( C.GENERACIONACIMIENTO) GENERACIONACIMIENTO
	FROM		(SELECT     CGF.IDCROMOSOMA,VALORADAPTACION 
				 FROM	    SM_CROMOSOMAGENERACIONVALORFITNNES CGF
				 INNER JOIN SM_GENERACION G ON G.IDGENERACION = CGF.IDGENERACION 
				 WHERE		G.IDCONFIGURACION = @IDCONFIGURACION
				 GROUP BY   CGF.IDCROMOSOMA,VALORADAPTACION 
				) TB
	INNER JOIN	SM_CROMOSOMA C ON TB.IDCROMOSOMA = C.IDCROMOSOMA
	GROUP BY	VALORADAPTACION
END
GO	

CREATE PROCEDURE sp_obtenerOrganizaciones(
@NOMBRE VARCHAR(100)
)
AS
BEGIN
	SELECT * FROM SM_ORGANIZACION
	WHERE (NOMBRECORTO LIKE '%'+@NOMBRE+'%')
			OR (NOMBRELARGO LIKE '%'+@NOMBRE+'%')
END	
GO

CREATE PROCEDURE sp_obtenerHallazgos

AS
BEGIN
	SELECT		H.IDHALLAZGO, NOMBRECRITERIO,NOMBRETECNICO,SIGLACRITERIO,
				NOMBREHALLAZGO, NUMEROHALLAZGO, MAX(O.NOMBRECORTO) SIGLAORGANIZACION
	 FROM		SM_HALLAZGOS H
	INNER JOIN	SM_CRITERIOS C ON H.IDCRITERIO = C.IDCRITERIO 
	INNER JOIN	SM_HALLAZGOSPPORORGANIGACION HPO ON HPO.IDHALLAZGO = H.IDHALLAZGO 
	INNER JOIN	SM_ORGANIZACION O ON O.IDORGANIZACION = HPO.IDORGANIZACION 
	GROUP BY	H.IDHALLAZGO, NOMBRECRITERIO,NOMBRETECNICO,SIGLACRITERIO,
				NOMBREHALLAZGO, NUMEROHALLAZGO
	ORDER BY	H.IDHALLAZGO ASC
END
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerHallazgozPorOrganizacion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerHallazgozPorOrganizacion    
GO

CREATE PROCEDURE sp_obtenerHallazgozPorOrganizacion(
	@NOMBREORGANIZACION VARCHAR(100)
)
AS
BEGIN
		--DECLARE @NOMBREORGANIZACION VARCHAR(100)
		
		IF(@NOMBREORGANIZACION IS NULL)
			SET @NOMBREORGANIZACION = ''
		
		SELECT		O.NOMBRELARGO NOMBREORGANIZACION,
					O.NOMBRECORTO SIGLAORGANIZACION,
					H.NUMEROHALLAZGO,
					H.NOMBREHALLAZGO,
					H.USARHALLAZGO
		 FROM		SM_HALLAZGOS H
		INNER JOIN	SM_HALLAZGOSPPORORGANIGACION HPO ON HPO.IDHALLAZGO = H.IDHALLAZGO
		INNER JOIN	SM_ORGANIZACION O ON O.IDORGANIZACION = HPO.IDORGANIZACION
		WHERE (NOMBRECORTO LIKE '%'+ @NOMBREORGANIZACION+ '%')
			OR (NOMBRELARGO LIKE '%'+ @NOMBREORGANIZACION +'%')
END
GO

CREATE PROCEDURE sp_obtenerNumeroCromosomasPorFitnnes(
	@IDCONFIGURACION INT
)
AS
BEGIN
	SELECT  VALORADAPTACION, COUNT(*) [NRO CROMOSOMAS] 
	FROM	(SELECT		NUMEROCROMOSOMA,VALORADAPTACION 
			 FROM		SM_CROMOSOMAGENERACIONVALORFITNNES CGF
			 INNER JOIN SM_CROMOSOMA C ON CGF.IDCROMOSOMA = C.IDCROMOSOMA
			 INNER JOIN SM_GENERACION G ON G.IDGENERACION = CGF.IDGENERACION 
			 WHERE		G.IDCONFIGURACION = @IDCONFIGURACION
			 GROUP BY	NUMEROCROMOSOMA,VALORADAPTACION) TB
	GROUP BY VALORADAPTACION

END	
GO

IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerResultadoPorConfiguracion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerResultadoPorConfiguracion    
GO

CREATE PROCEDURE sp_obtenerResultadoPorConfiguracion(
	@IDCONFIGURACION INT 
)
AS
BEGIN
	
--	DECLARE @IDCONFIGURACION INT 
--	SET @IDCONFIGURACION = 0
	
	SELECT		VALORADAPTACION,G.IDCONFIGURACION , MIN(C.IDCROMOSOMA) IDCROMOSOMA, MIN(GENERACIONACIMIENTO) GENERACIONACIMIENTO
			INTO #TEMP_SM_EFICIENCIA
	FROM		dbo.SM_CROMOSOMAGENERACIONVALORFITNNES CGF 
	INNER JOIN	dbo.SM_GENERACION G ON G.IDGENERACION = CGF.IDGENERACION
	INNER JOIN	dbo.SM_CROMOSOMA C ON CGF.IDCROMOSOMA = C.IDCROMOSOMA
	WHERE		CAST(LEFT(VALORADAPTACION,3) AS CHAR(4)) +''+ CAST(ISNULL( G.IDCONFIGURACION,0) AS CHAR(4))  IN (
							SELECT		CAST( LEFT(MAX(VALORADAPTACION),3) AS CHAR(4)) +''+ CAST(ISNULL( G.IDCONFIGURACION,0) AS CHAR(4))
							FROM		dbo.SM_CROMOSOMAGENERACIONVALORFITNNES CGF 
							INNER JOIN	dbo.SM_GENERACION G ON G.IDGENERACION = CGF.IDGENERACION
							WHERE		G.IDCONFIGURACION = CASE WHEN @IDCONFIGURACION = 0 THEN G.IDCONFIGURACION ELSE @IDCONFIGURACION END
							GROUP BY	G.IDCONFIGURACION 
				)  	
				AND G.IDCONFIGURACION = CASE WHEN @IDCONFIGURACION = 0 THEN G.IDCONFIGURACION ELSE @IDCONFIGURACION END
	GROUP BY	VALORADAPTACION, G.IDCONFIGURACION

	SELECT		C.IDCONFIGURACION, C.NUMEROGENERACIONACONSIDERAR, C.PROBABIBLIDADCROSSOVER,
				C.PROBABILIDADMUTACION,EF.VALORADAPTACION, CROM.GENERACIONACIMIENTO, 
				C.NUMEROPACIENTESACONSIDERAR,C.NUMEROPOBLACIONACONSIDERAR,
				TB.NUMEROREGLASACONSIDERAR
	FROM		SM_CONFIGURACION C
	INNER JOIN	(  SELECT IDCONFIGURACION, SUM(NUMEROREGLASACONSIDERAR) NUMEROREGLASACONSIDERAR
					 FROM dbo.SM_CONFIGURACIONORGANIZACION 
				 GROUP BY IDCONFIGURACION) TB ON C.IDCONFIGURACION = TB.IDCONFIGURACION
	INNER JOIN	#TEMP_SM_EFICIENCIA EF ON C.IDCONFIGURACION = EF.IDCONFIGURACION
	INNER JOIN	SM_CROMOSOMA CROM ON EF.IDCROMOSOMA = CROM.IDCROMOSOMA
	WHERE		C.IDCONFIGURACION = CASE WHEN @IDCONFIGURACION = 0 THEN C.IDCONFIGURACION ELSE @IDCONFIGURACION END

	DROP TABLE #TEMP_SM_EFICIENCIA

END
GO


IF EXISTS (SELECT * FROM  dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_obtenerUltimoNumeroConfiguracion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE sp_obtenerUltimoNumeroConfiguracion    
GO

CREATE PROCEDURE sp_obtenerUltimoNumeroConfiguracion
AS
BEGIN
		
	SELECT		TOP 1
				IDCONFIGURACION,NUMEROCONFIGURACION 
	FROM		SM_CONFIGURACION
	ORDER BY	NUMEROCONFIGURACION DESC
END
GO
